import router from "./router";
import store from "./store";
import { ElMessage } from "element-plus";

// 白名单：不需要登录就可以访问的路由
const whiteList = ["/login"];

router.beforeEach(async (to, from, next) => {
  // 获取token
  const hasToken = store.state?.user?.token;

  if (hasToken) {
    // 已登录
    if (to.path === "/login") {
      // 如果已登录，但访问登录页，则重定向到首页
      next({ path: "/" });
    } else {
      // 确定用户是否已获取其用户信息
      const hasUserInfo =
        store.state.user.userInfo &&
        Object.keys(store.state.user.userInfo).length > 0;

      if (hasUserInfo) {
        next();
      } else {
        try {
          // 尝试从localStorage获取用户信息
          const userInfoStr = localStorage.getItem("userInfo");
          if (userInfoStr) {
            const userInfo = JSON.parse(userInfoStr);
            store.commit("SET_USER", userInfo);
          }
          // 继续路由
          next();
        } catch (error) {
          // 出错则清空登录状态，重新登录
          store.commit("CLEAR_USER");
          ElMessage.error("登录已过期，请重新登录");
          next(`/login?redirect=${to.path}`);
        }
      }
    }
  } else {
    // 未登录
    if (whiteList.indexOf(to.path) !== -1) {
      // 在白名单中，可以直接访问
      next();
    } else {
      // 不在白名单中，重定向到登录页
      next(`/login?redirect=${to.path}`);
    }
  }
});

export default router;
